/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.negocio.objeto;

import byblos.negocio.Idioma;
import byblos.negocio.galeria.GaleriaObjeto;
import byblos.negocio.pacote.Pacote;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;

/**
 *
 * @author Marco Aurélio
 */
@Entity
@NamedQueries(value = {@NamedQuery(name = "ObjetoPorTipo", query = "SELECT o FROM Objeto o WHERE o.tipo = ?1"),
    @NamedQuery(name = "ObjetoAtivadoPorTipo", query = "SELECT o FROM Objeto o WHERE o.ativado = true AND o.tipo = ?1"),
    @NamedQuery(name = "ObjetoPorTipoIdioma", query = "SELECT o FROM Objeto o WHERE o.tipo = ?1 AND o.idioma = ?2")
})
public class Objeto implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String nome;
    private boolean ativado = true;
    private String tituloDescricao;
    @Column(columnDefinition = "text")
    private String descricao;
    private String display;
    private String nomeBotao;
    private TipoObjeto tipo;
    private Idioma idioma;
    @OneToOne(cascade = CascadeType.ALL)
    private GaleriaObjeto galeria = new GaleriaObjeto();

    public Objeto() {
    }

    public Objeto(TipoObjeto tipo) {
        this.tipo = tipo;
    }

    public String getDescricaoTipo() {
        if (tipo == TipoObjeto.PACOTE) {
            Pacote pacote = (Pacote) this;
            return tipo.getDescricao() + " " + pacote.getTipoPacote().getDescricao();
        }
        return tipo.getDescricao();
    }

    public GaleriaObjeto getGaleria() {
        return galeria;
    }

    public void setGaleria(GaleriaObjeto galeria) {
        this.galeria = galeria;
    }

    public boolean isAtivado() {
        return ativado;
    }

    public void setAtivado(boolean ativado) {
        this.ativado = ativado;
    }

    public boolean isAtivo() {
        return ativado;
    }

    public void setAtivo(boolean ativo) {
        this.ativado = ativo;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public String getDisplay() {
        return display;
    }

    public void setDisplay(String display) {
        this.display = display;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getNomeBotao() {
        return nomeBotao;
    }

    public void setNomeBotao(String nomeBotao) {
        this.nomeBotao = nomeBotao;
    }

    public String getTituloDescricao() {
        return tituloDescricao;
    }

    public void setTituloDescricao(String tituloDescricao) {
        this.tituloDescricao = tituloDescricao;
    }

    public Idioma getIdioma() {
        return idioma;
    }

    public void setIdioma(Idioma idioma) {
        this.idioma = idioma;
    }

    public TipoObjeto getTipo() {
        return tipo;
    }

    public void setTipo(TipoObjeto tipo) {
        this.tipo = tipo;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Objeto other = (Objeto) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + this.id;
        return hash;
    }

    @Override
    public String toString() {
        return nome;
    }
}
